#pragma once

#include <Eigen/Dense>
#include <eigen/loss.h>

namespace  ldl_eigen
{
class CrossEntropyLoss : public Loss
{
public:
    CrossEntropyLoss() = default;
    virtual ~CrossEntropyLoss() = default;

    virtual float forward(const Eigen::MatrixXf& inputs, const Eigen::MatrixXf& labels) override;
    virtual Eigen::MatrixXf backward() override;
private:
    Eigen::MatrixXf input_;  // Store the input for backward pass
    Eigen::MatrixXf labels_;  // Store the labels for backward pass
    Eigen::MatrixXf output_; // Store the output gradient for backward pass
};
}
